

use yew::prelude::*;
use yew_router::prelude::*;

use crate::components::{container::Container, home::Home, not_found::NotFound};

#[function_component(App)] //Yew宏 用于声明app函数是一个组件。App是这个组件的名称。
pub fn app() -> Html { //返回值需要实现 ntex::web::Responder
    html!{
        <BrowserRouter>  //BrowserRouter是Yew Router提供的一个组件，用于在应用中启用浏览器路由。这意味着应用的路由将基于浏览器的URL进行管理。
            <Switch<Route> render={switch} /> //Switch组件用于根据当前URL匹配并渲染相应的组件。
        </BrowserRouter>
    }
}

//定义路由枚举
#[derive(Debug, Clone, Routable, Eq, PartialEq)]
pub enum Route {
    #[at("/")]
    Home,
    #[not_found]
    #[at("/404")]
    NotFound,
}

fn switch(route: Route) -> Html {
    html!(
        <Container>
        {
            match route {
                Route::Home => html!{ <Home/> },
                Route::NotFound => html!{ <NotFound/> },
            }
        }
        </Container>
    )
}